perm filename USERS.SAI[PUB,TES]1 blob sn#129311 filedate 1974-11-07 generic text, type T, neo UTF8
00100	BEGOF("USERS")
00200	
00300	COMMENT
00400	
00500	         *** Variations at Different Sites are Extensive ***
00600	
00700	User interactions at startup and DEBUG times.
00800	
00900	;
01000	
01300	IFC TENEX THENC
01400	
01500	DEFINE SUBCMDS= [11]; COMMENT NOT COUNTING ? AND CR ;
01600	DEFINE DCASE= [1], XCASE= [2], TCASE= [3], MCASE= [4],
01700		PCASE= [5], SCASE= [6],
01800		YCASE= [7], NCASE= [8], ACASE= [9],
01900		BCASE= [10], HCASE= [11],
02000		QUESTCASE= [12], CRCASE= [13]; COMMENT ALWAYS LAST TWO ;
02100	PRELOAD!WITH "ERROR", "DOCUMENT: ", "XGP", "TTY",
02150		IFCR PARCVER THENC PARCMNEMONIC ELSEC "MIC" ENDC,
02200		"PRINT DEBUG INFO", "SPREAD=",
02300		"YES", "NO", "ASK", "BIG", "HUGE" ;
02400	OWN STRING ARRAY COMPLETION[0:SUBCMDS] ;
02500	PRELOAD!WITH "ERROR", "(OUTPUT FILE NAME)", "PRINT DEVICE",
02600		"PRINT DEVICE (DEFAULT)", "PRINT DEVICE",
02700		"(LINE NUMBERS AND ERRORS) IN MARGIN OF DOCUMENT",
02800		"1 TO 9 (DEFAULT IS 1=SINGLE SPACE)",
02900		"DO DELETE INTERMEDIATE FILES (DEFAULT)",
03000		"DONT DELETE INTERMEDIATE FILES",
03100		"TO DELETE INTERMEDIATE FILES",
03200		"SYMBOL TABLE", "SYMBOL TABLE" ;
03300	OWN STRING ARRAY EXPLANATION[0:SUBCMDS] ;
03400	
03500	ENDC
03600	
03700	PROCEDURES
03800	
03900	IFCR CMUVER THENC
04000	REQUIRE "PUBTMP.SAI" SOURCE!FILE ;
04100	COMMENT RUNPROG, READTMPCOR, ETC. ;
04200	ENDC
     

00100	PUBLIC SIMPLE PROCEDURE USERS! ;$"#
00200	BEGIN "USERS!"
00300	
00400	IFC TENEX THENC
00500	JOBNO ← CVS(GJINF(J, I, J)) ;
00600	CONDIR ← DIRST(I) ;
00700	ENDC TES 10/25/73 ;
00800	
00900	DOPASS3←FALSE;	RKJ:  1-4-74;
01000	ERRLF←FALSE; RKJ 6/25/74 ;
01100	DEBUGFLAG ← -1 ; TES 8/21/74 ;
01200	
01300	IFC CMUVER THENC
01400		LIBPPN ← "[A700PU00]";
01500	ENDC		COMMENT RKJ 10-10-73;
01600	
01700	IFC SAILVER THENC
01800		LIBPPN ← IF EQU(CVXSTR(CALL(0,"DSKPPN"))[4 TO 6], "TES") THEN NULL ELSE "[1,3]"  ;
01900	ENDC
02000	
02100	IFC ITSVER THENC PJ 5/27/74;
02200		LIBPPN ← " COMMON;" ; PJ 5/28/74 THE SPACE IS SIGNIFICNAT ;
02300	ENDC
02400	
02500	IFC TENEX THENC LIBPPN ← IF EQU(CONDIR,"PUB") THEN "<PUB>" ELSE "<SUBSYS>" ; ENDC
02600	
02700	END "USERS!" ;
     

00100	IFSITE NOT TENEX THENK
00200	
00300	PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE ANYSTART(STRING COMDLINE) ;$"#
00400	BEGIN "ANYSTART"
00500	STRING OPTIONS, N, M ;
00550	INTEGER EXT, PPN ;
00600	IFC ITSVER PJ 5/28/74 ;
00700	    THENC SETBREAK(1, "←/()", CR&LF&FF, "INS")
00800	    ELSEC SETBREAK(1, "←/()", CR&LF&TB&FF&SP, "INS") ENDC ;
00900	SETBREAK(4, ":", NULL, "IS") ;		RKJ: 5-17-74 ;
01000	SETBREAK(2, DIGS, SP, "XNS") ;
01100	SETBREAK(3, ".[", NULL, "INR") ;
01200	OUTFILE ← SCAN(COMDLINE, 1, BRC) ;
01300	IF BRC NEQ "←" THEN BEGIN INFILE ← OUTFILE ; OUTFILE ← NULL END
01400	ELSE INFILE ← SCAN(COMDLINE, 1, BRC) ; TES 8/14/74 SIMPLIFIED;
01500	RKJ: 26-Sep-74 - CCL linkages;
01600	IFC CMUVER THENC
01700	IF INFILE[∞ FOR 1]="!" THEN
01720	    BEGIN
01740		RUNPROG(INFILE[1 TO ∞-1],1);  RKJ: fixed 7-Nov-74;
01760		START!CODE CALLI 0,'12 END;
01780	    END;
01800	ENDC
01900	INCHAN ← OPENTOREAD(NULL, "Manuscript ", INFILE, PUBEXT, NULL) ;
02000	IFILENAME ← CVXSTR(CVFIL(INFILE, EXT, INPPN)) ;
02050	FULLFILE ← INFILE ; TES TEMPORARY 10/15/74 ;
02100	IF NULSTR(OUTFILE) THEN
02200		BEGIN
02300		OUTFILE ← IFILENAME ;
02400		GENREXT ← TRUE ;
02500		END
02600	ELSE	BEGIN
02700		CVFIL(OUTFILE, EXT, PPN) ;
02800		GENREXT ← EXT=0 ;
02900		END ;
03000	TMPFILE ← IFILENAME & RPGEXT ;
03100	WHILE BRC="/" DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) ;
03200	IF BRC = "(" THEN DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) & (IF BRC="/" THEN BRC ELSE NULL)
03300		UNTIL BRC = 0 OR BRC = ")";
03400	IF FULSTR(OPTIONS) THEN
03500	DO	BEGIN
03600		N ← SCAN(OPTIONS, 2, BRC) ;
03700		IF "a" LEQ BRC LEQ "z" THEN BRC←BRC-'40;  RKJ: 5-10-74 ;
03800		RKJ: 5-10-74 got rid of all lower case below ;
03900		IF BRC = "D" THEN DEBUG ← -1
04000		ELSE IF BRC = "S" THEN PREFMODE ← IF NULSTR(N) THEN 1 ELSE CVD(N)
04100		ELSE IF BRC = "M" THEN DEVICE ← -MIC
04200		ELSE IF BRC = "T" THEN DEVICE ← -TTY
04300		ELSE IF BRC = "L" THEN DEVICE ← -LPT
04400		ELSE IF BRC = "X" THEN DEVICE ← -XGP   RKJ;
04500		ELSE IF BRC="N" OR BRC="Y" OR BRC="A" THEN DELINT ← BRC
04600		ELSE IF BRC = "B" THEN SYMNO ← BIG!SIZE - 1
04700		ELSE IF BRC = "H" THEN SYMNO ← HUGE!SIZE - 1
04800		ELSE IF BRC = "P" AND OPTIONS = "U" THEN
04900			OPTIONS ← OPTIONS[3 TO ∞]  COMMENT /PUB ;
05000		ELSE IF BRC NEQ 0 THEN EARLYWARNING("Never heard of a " & BRC & " option") ;
05100		END
05200	UNTIL BRC = 0 ;
05300	FOR DUMMY←1 THRU 4 DO BREAKSET(DUMMY, NULL, "O") ;	RKJ: 5-17-74 ;
05400	END "ANYSTART" ;
05500	
05600	ENDC
     

00100	PUBLIC SIMPLE PROCEDURE DBURP ;$"#
00200	BEGIN TES 8/19/74 DEBUG PRINTOUTS ;
00300	BOOLEAN VERBOSE ; INTEGER I ;
00400	IF ON AND NOT SWDBACK THEN BEGIN OUTSTR(CRLF); SWDBACK←TRUE END ;
00500	PASS ;
00600	IF ITS(INPUT) THEN
00700		BEGIN
00800		PASS ;
00900		VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
01000		IF ON THEN BURPINPUT(VERBOSE) ;
01100		END
01200	ELSE IF ITS(AREAS) THEN
01300		BEGIN
01400		PASS ;
01500		VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
01600		IF ON THEN BURPAREAS(VERBOSE) ;
01700		IF STATUS>-1 AND	COMMENT EVEN IF NOT ON, CHECK ;
01800			(WHATIS(THISAREA) NEQ AREAIDA OR WHATIS(AA) NEQ AAA OR
01900			 (I←DEFA) AND I NEQ AREAIXM)
02000				THEN WARN(NULL,"ARRAYS AND IDAS DISAGREE: PUB BUG!" & CRLF) ;
02100		END
02200	ELSE WARN(NULL, "Unrecognized BURP command " & THISWD) ;
02300	END "DBURP" ;
     

00100	PUBLIC SIMPLE PROCEDURE DPUB!DEBUG ;$"#
00200	IF NOT ON THEN PASS ELSE
00300	BEGIN "BUGLOOP"
00400	STRING INPT ;
00500	IF FULSTR(INPT←TYPEIN) THEN
00600		BEGIN
00700		SWICH("TTY←" & SUBST(SUBST(INPT,TB,SP,SP),
00800			CRLF&"##", ";"&CRLF&TB, CRLF&TB) &  TES 8/23&25/74;
00900			(CRLF & TB & TB & "PUB!DEBUG" & CRLF & TB & TB),
01000			-1, 0) ;
01100		PASS ;
01200		END
01300	ELSE PASS ;
01400	END "BUGLOOP" ;
     

00100	IFSITE TENEX THENK
00200	
00300	PRIVATE SITE(TENEX) SIMPLE INTEGER PROCEDURE ININTEGER(INTEGER NUMBER) ;$"#
00400		BEGIN
00500		INTEGER N, I ;
00600		I ← -1 ;
00700		DO	BEGIN
00800			N ← INCHRW ;
00900			IF N="?" THEN
01000				BEGIN
01100				OUTSTR(EXPLANATION[NUMBER]) ;
01200				N ← IF I<0 THEN INCHRW ELSE RUBOUT ;
01300				END ;
01400			IF N=ALTMODE OR N=EOL OR N=SP THEN
01500				BEGIN
01600				IF I<0 THEN OUTSTR(CVS(I←1)) ;
01700				IF N NEQ EOL THEN OUTSTR(CRLF) ;
01800				RETURN(I) ;
01900				END ;
02000			IF "1" LEQ N AND N LEQ "9" THEN
02100				I ← IF I<0 THEN N-"0" ELSE 10*I+(N-"0")
02200			ELSE BEGIN OUTSTR("XXX"&CRLF) ; RETURN(-1) END ;
02300			END
02400		UNTIL FALSE ;
02500		END "ININTEGER" ;
02600	
02700	ENDC
     

00100	IFSITE NOT TENEX THENK
00200	
00300	PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE RPGSTART ;$"#
00400	
00500	IFC CMUVER THENC
00600	
00800	BEGIN "RPGSTART"
00900	STRING CMD,OTHER!CMDS; LABEL NORPG;
01000	IF NOT RTMPFILE("PUB",OTHER!CMDS,TRUE,TRUE) THEN
01100	    NORPG: BEGIN RPGSW←FALSE; SSTART; RETURN END;
01200	SETBREAK(1,LF,CR,"IS");
01300	DO CMD←SCAN(OTHER!CMDS,1,DUMMY) UNTIL (FULSTR(CMD) OR NULSTR(OTHER!CMDS));
01400	IF NULSTR(CMD) THEN GO NORPG;
01500	IF FULSTR(OTHER!CMDS) THEN WTMPFILE("PUB",OTHER!CMDS,TRUE);
01600	OTHER!CMDS←NULL;
01700	ANYSTART(CMD);
01800	OUTSTR("PUB: ");
01900	CMD←NULL;
02000	END "RPGSTART" ;
06800	
06900	ELSEC
07000	
07100	BEGIN "RPGSTART"
07200	STRING CMD ;
07300	EOF ← 0 ; OPEN(0, "DSK", 0, 1, 0, 50, BRC, EOF) ;
07400	LOOKUP(0, "QQPUB"&RPGEXT, FLAG) ; TES 8/14/74 SIMPLIFIED ;
07500	IF FLAG THEN EARLYWARNING("RPG PROBLEM: QQPUB.RPG NONEXISTENT") ;
07600	SETBREAK(1, LF, CR, "INS") ;
07700	CMD ← INPUT(0,1) ;
07800	ANYSTART(CMD) ; RELEASE(0) ;
07900	END "RPGSTART" ;
08000	
08100	ENDC
08200	
08300	ENDC
     

00100	IFSITE CMUVER THENK
00200	
00300	PUBLIC SITE(CMUVER) SIMPLE PROCEDURE RUNLIBPROG(STRING FILENAME) ;$"#
00400		RUNPROG(LIBDEV & ":" & FILENAME & LIBPPN, 1) ;
00500	
00600	ENDC
     

00100	IFSITE NOT TENEX THENK
00200	
00300	PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE SSTART ;$"#
00400	BEGIN "SSTART"
00500	STRING S ;
00600	DO BEGIN OUTCHR("*"); S←INCHWL; END UNTIL FULSTR(S);
00700	ANYSTART(S);
00800	END "SSTART";
00900	
01000	ENDC
     

00100	IFSITE TENEX THENK
00200	
00300	PRIVATE SITE(TENEX) SIMPLE BOOLEAN PROCEDURE SUBCOMMAND(INTEGER NUMBER) ;$"#
00400		BEGIN
00500		INTEGER N ;
00600		OUTSTR(COMPLETION[NUMBER][2 TO ∞]) ;
00700		N ← INCHRW ;
00800		IF N="?" OR N=ALTMODE THEN
00900			BEGIN
01000			OUTSTR(SP & EXPLANATION[NUMBER]) ;
01100			N ← INCHRW ;
01200			END ;
01300		IF N=CR OR N=EOL THEN RETURN(TRUE) ;
01400		IF N=ALTMODE OR N=SP THEN
01500			BEGIN OUTSTR(CRLF) ; RETURN(TRUE) ; END ;
01600		OUTSTR("XXX"&CRLF) ; RETURN(FALSE) ;
01700		END "SUBCOMMAND" ;
01800	
01900	ENDC
     

00100	PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) ;$"#
00200	BEGIN TES 8/23/74 FOR PUB!DEBUG AT LEAST ;
00300	INTEGER WHICH ; TES 8/23/74 ;
00400	STRING S ;
00500	S ← NULL ; WHICH ← 0 ;
00600	WHILE FULSTR(STR) DO
00700		IF EQU(STR[1 TO LENGTH(OLDS)], OLDS) THEN
00800			BEGIN
00900			S ← S & (IF (WHICH←WHICH+1)=1 THEN NEWFIRST ELSE NEWREST) ;
01000			STR ← STR[LENGTH(OLDS)+1 TO ∞] ;
01100			END
01200		ELSE S ← S & LOP(STR) ;
01300	RETURN(S)  ;
01400	END "SUBST" ;
     

00100	IFSITE TENEX THENK
00200	
00300	PUBLIC SITE(TENEX) SIMPLE PROCEDURE TENEXSTART ;$"#
00400	BEGIN
00450	INTEGER THECHR ; TES 10/22/74 PREFER <CR> AFTER <COMMA> ;
00500	INTEGER N ; BOOLEAN DUN ;
00600	PRELOAD!WITH
00700	[13]0,	CRCASE,	[17]0,	CRCASE,
00800	[31]0,	QUESTCASE,
00900	0,	ACASE,	BCASE,	0,	DCASE,	0,	0,	0,
01000	HCASE,	0,	0,	0,	0,	MCASE,	NCASE,	0,
01100	PCASE,	0,	0,	SCASE,	TCASE,	0,	0,	0,
01200	XCASE,	YCASE,	0,	[5]0,
01300	0,	ACASE,	BCASE,	0,	DCASE,	0,	0,	0,
01400	HCASE,	0,	0,	0,	0,	MCASE,	NCASE,	0,
01500	PCASE,	0,	0,	SCASE,	TCASE,	0,	0,	0,
01600	XCASE,	YCASE,	0,	[5]0	;
01700	OWN INTEGER ARRAY CNVCASE[0:127] ;
01750	IFCR PARCVER THENC PARCASE ; ENDC
01800	OUTFILE ← NULL ;
01900	DO	BEGIN "GTINCHAN" TES 6/11/74 ;
02000		OUTSTR("MANUSCRIPT: ") ;
02100		WHILE -1 = (INCHAN ←
02200			GTJFNL(NULL, '162000000000, '100000101,
02300				NULL, NULL, NULL, "PUB", NULL, NULL, NULL)) DO
02400			OUTSTR("  ?" & CRLF & "MANUSCRIPT: ") ;
02500		OPENF(INCHAN, 2) ;
02600		IF !SKIP! THEN
02700			BEGIN
02800			OUTSTR("CAN'T OPEN MANUSCRIPT; IS PROTECTION OK?"&CRLF) ;
02900			RLJFN(INCHAN) ;
03000			END
03100		ELSE DONE ;
03200		END "GTINCHAN"
03300	UNTIL FALSE ;
03400	INFILE ← JFNS(INCHAN, 0) ;
03450	FULLFILE ← JFNS(INCHAN, '211110040001) ; TES 10/15/74 ;
03500	INPPN ← JFNS(INCHAN, '10000000001) ;
03600	IFILENAME ← JFNS(INCHAN, '1000000000) ;
03700	EOF ← 0 ; SETINPUT(INCHAN, 150, BRC, EOF) ;
03800	DUN ← FALSE ; 
03900	BKJFN('100) ; COMMENT WAS THE CONFIRM WITH A COMMA? ;
04000	IF CHARIN('100) = "," THEN
04100	BEGIN "SUBCOMMANDS"
04200	IF (THECHR←INCHRW)=EOL THEN THECHR←0 ELSE OUTSTR(CRLF) ;
04300	DO	BEGIN
04400		OUTSTR("@@") ;
04500		CASE CNVCASE[IF THECHR THEN THECHR ELSE INCHRW] OF
04600			BEGIN
04700			[0] OUTSTR("?"&CRLF) ;
04800			[DCASE] BEGIN
04900				OUTSTR(COMPLETION[DCASE][2 TO ∞]) ;
05000				N ← GTJFNL(NULL, '462000000000,
05100				'100000101, NULL, NULL, IFILENAME,
05200				"DOC", NULL, NULL, NULL) ;
05300				IF N=-1 THEN OUTSTR("XXX"&CRLF)
05400				ELSE	BEGIN
05500					OUTFILE ← JFNS(N, 0) ;
05600					RLJFN(N) ; OUTSTR(CRLF) ;
05650					GENREXT ← FALSE ;
05700					END ;
05800				END ;
05900			[XCASE] IF SUBCOMMAND(XCASE) THEN DEVICE←-XGP ;
06000			[TCASE] IF SUBCOMMAND(TCASE) THEN DEVICE←-TTY ;
06100			[MCASE] IF SUBCOMMAND(MCASE) THEN DEVICE←-MIC ;
06600			[PCASE] IF SUBCOMMAND(PCASE) THEN DEBUG←-1 ;
06700			[SCASE] BEGIN
06800				OUTSTR(COMPLETION[SCASE][2 TO ∞]) ;
06900				IF (N←ININTEGER(SCASE))>0 THEN PREFMODE←N ;
07000				END ;
07100			[YCASE] IF SUBCOMMAND(YCASE) THEN DELINT←"Y" ;
07200			[NCASE] IF SUBCOMMAND(NCASE) THEN DELINT←"N" ;
07300			[ACASE] IF SUBCOMMAND(ACASE) THEN DELINT←"A" ;
07400			[BCASE] IF SUBCOMMAND(BCASE) THEN SYMNO←BIG!SIZE-1 ;
07500			[HCASE] IF SUBCOMMAND(HCASE) THEN SYMNO←HUGE!SIZE-1 ;
07600			[QUESTCASE]
07700				BEGIN
07800				OUTSTR("PUB SUBCOMMANDS ARE:"&CRLF) ;
07900				FOR N ← 1 THRU SUBCMDS DO
08000					OUTSTR("  "&COMPLETION[N] & SP &
08100					   EXPLANATION[N] & CRLF) ;
08200				OUTSTR("CR AFTER EACH, CR AT END"&CRLF) ;
08300				END ;
08400			[CRCASE] DUN ← TRUE
08500			END ;
08550		THECHR ← 0 ;
08600		END
08700	UNTIL DUN ;
08800	END "SUBCOMMANDS" ;
08900	XCRIBL ← DEVICE = -XGP ;
09000	IF NULSTR(OUTFILE) THEN
09050		BEGIN TES 10/22/74 ;
09075		OUTFILE ← IFILENAME ;
09087		GENREXT ← TRUE ;
09093		END ;
09200	END "TENEXSTART" ;
09300	
09400	ENDC
     

00100	FINISHED
00200	
00300	ENDOF("USERS")